#include "./../Headers/math_angle.h"

namespace Mathematics {
	//namespace Angler {
	//	double *r_sin_list = NULL;
	//	const usint r_sin_list_size = 91;
	//	
	//	//! Range bounded angle.
	//	/*! 
	//		Number in the range [0,ang_max[.
	//		
	//		\param angle value desired to bound
	//		\param ang_max bounds
	//		\return angle in bounds
	//		
	//		\code
	//		cout << ValidAngle( 450, 360 ) << endl	// 90.0
	//		cout << ValidAngle( -450, 360 ) << endl	// 270.0 (= -90.0)
	//		\endcode
	//	*/
	//	double ValidAngle(const double &angle, const double ang_max){
	//		double teta = angle;
	//		
	//		if(teta < 0){
	//			teta = ang_max * (1+Fract( teta / ang_max ));
	//		}
	//		else{
	//			teta = ang_max * Fract( teta / ang_max );
	//		}
	//	
	//		return teta;
	//	};
	//	
	//	void CreateSinList(){
	//		r_sin_list = (double *) malloc( r_sin_list_size * sizeof(double) );
	//		if( r_sin_list == NULL ){
	//			cout << "Couldn't allocate memory!" << endl;
	//			exit(-1);
	//		}
	//		
	//		for( usint i = 0; i < r_sin_list_size; ++i ){
	//			r_sin_list[i] = sin( DtoR( (double)i ) );
	//		}
	//	};
	//	
	//	void DestroySinList(){
	//		if( r_sin_list != NULL ){
	//			free( r_sin_list );
	//			r_sin_list = NULL;
	//		}
	//	};

	//	void AngleTest(){
	//		
	//		cout << endl << "---AngleTest---" << endl;
	//		
	//		cout << "UnitConversion(180.0,360.0,400.0) = " << UnitConversion(180.0,360.0,400.0) << endl;
	//		cout << "UnitConversion(90.0,max_degree,max_radian) = " << UnitConversion(90.0,max_degree,max_radian) << endl;
	//		
	//		cout << "DtoR(90.0) = " << DtoR(90.0) << endl;
	//		cout << "DtoR(90.0)/max_radian = " << DtoR(90.0)/max_radian << endl;
	//		cout << "RtoD(DtoR(90.0)) = " << RtoD(DtoR(90.0)) << endl;
	//		
	//		cout << "DtoG(90.0) = " << DtoG(90.0) << endl;
	//		cout << "GtoD(DtoG(90.0)) = " << GtoD(DtoG(90.0)) << endl;
	//		
	//		cout << "GtoR(100.0) = " << GtoR(100.0) << endl;
	//		cout << "RtoG(GtoR(100.0)) = " << RtoG(GtoR(100.0)) << endl;
	//		
	//		cout << "ValidAngle(400.0,360.0) = " << ValidAngle(400.0,360.0) << endl;
	//		cout << "ValidAngle(-100.0,360.0) = " << ValidAngle(-100.0,360.0) << endl;
	//		cout << "ValidAngle(360.0,360.0) = " << ValidAngle(360.0,360.0) << endl;
	//		
	//		cout << "ValidAngleDegree(200.0) = " << ValidAngleDegree(200.0) << endl;
	//		cout << "ValidAngleRadian(10.0) = " << ValidAngleDegree(10.0) << endl;
	//		cout << "ValidAngleGrade(200.0) = " << ValidAngleDegree(200.0) << endl;
	//		
	//		cout << endl << "---TestEnd---" << endl;
	//	};

	//};

	const double Radian::max = 2.0*pi;
	const double Degree::max = 360.0;
	const double Grade::max = 400.0;
		
};
